#include <iostream>
#include <algorithm>
#include <cmath>
#include <cstdio>
#include <cstring>
#include <cstdlib>
using namespace std;
short read()
{
    short s = 0, w = 1;
    char ch = getchar();
    while (ch < '0' || ch > '9')
    {
        if (ch == '-')
            w = -1;
        ch = getchar();
    }
    while (ch >= '0' && ch <= '9')
        s = (s << 3) + (s << 1) + (ch ^ 48), ch = getchar();
    return s * w;
}
short t, x, y, Mod, i, f[10010][10010], s; //f数组，初值0。
short dfs(int x, int y, int step)
{               //x,y最好是int 型的，因为short可能会爆。
    int nx, ny; //新的得数。
    if (step > 10000)
        return 3;
    if (f[x][y] != 0)
        return f[x][y]; //记录下该状态，避免重复搜索。
    if (x == 0)
        f[x][y] = 1;
    if (y == 0)
        f[x][y] = 2; //判断是否是赢了还是输了。
    nx = (x + y) % Mod;
    ny = (nx + y) % Mod;
    return f[x][y] = dfs(nx, ny, step + 1);
}
int main()
{
    t = read();
    Mod = read(); //读入。
    while (t--)
    {
        x = read();
        y = read();       //输入x，y。
        s = dfs(x, y, 0); //s记录输赢，平局。
        if (s == 1)
            puts("1");
        else if (s == 2)
            puts("2");
        else
            puts("error");
        //判断是赢了，输了，还是平局。
    }
    return 0;
}